/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.cggveritas.crewintranet.jms.entities;

import java.io.ByteArrayInputStream;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author Alassane
 */
@Entity
@Table(name = "cv_travailleur")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "CvTravailleur.findAll", query = "SELECT c FROM CvTravailleur c"),
    @NamedQuery(name = "CvTravailleur.findById", query = "SELECT c FROM CvTravailleur c WHERE c.id = :id"),
    @NamedQuery(name = "CvTravailleur.findByIDpersonne", query = "SELECT c FROM CvTravailleur c WHERE c.iDpersonne = :iDpersonne"),
    @NamedQuery(name = "CvTravailleur.findByNom", query = "SELECT c FROM CvTravailleur c WHERE c.nom = :nom"),
    @NamedQuery(name = "CvTravailleur.findByPrenom", query = "SELECT c FROM CvTravailleur c WHERE c.prenom = :prenom"),
    @NamedQuery(name = "CvTravailleur.findByDatenaissance", query = "SELECT c FROM CvTravailleur c WHERE c.datenaissance = :datenaissance"),
    @NamedQuery(name = "CvTravailleur.findByAdressederesidence", query = "SELECT c FROM CvTravailleur c WHERE c.adressederesidence = :adressederesidence"),
    @NamedQuery(name = "CvTravailleur.findByGroupesangin", query = "SELECT c FROM CvTravailleur c WHERE c.groupesangin = :groupesangin"),
    @NamedQuery(name = "CvTravailleur.findByFacteurrhesus", query = "SELECT c FROM CvTravailleur c WHERE c.facteurrhesus = :facteurrhesus"),
    @NamedQuery(name = "CvTravailleur.findByNumerocq", query = "SELECT c FROM CvTravailleur c WHERE c.numerocq = :numerocq"),
    @NamedQuery(name = "CvTravailleur.findByImgscanrib", query = "SELECT c FROM CvTravailleur c WHERE c.imgscanrib = :imgscanrib"),
    @NamedQuery(name = "CvTravailleur.findByEtatChauffeur", query = "SELECT c FROM CvTravailleur c WHERE c.cvPosteoccupeIdposteoccupe.cvListeposteIdposte.idposte LIKE :idposte"),
    @NamedQuery(name = "CvTravailleur.findByImgprofil", query = "SELECT c FROM CvTravailleur c WHERE c.imgprofil = :imgprofil")})
public class CvTravailleur implements Serializable {
    @Lob
    @Column(name = "image_blog")
    private byte[] imageBlog;
    @Column(name = "name_image_blog")
    private String nameImageBlog;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idchauffeur", fetch = FetchType.LAZY)
    private List<CvAffectationbesoin> cvAffectationbesoinList;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "IDpersonne")
    private int iDpersonne;
    @Basic(optional = false)
    @Column(name = "nom")
    private String nom;
    @Basic(optional = false)
    @Column(name = "prenom")
    private String prenom;
    @Column(name = "datenaissance")
    @Temporal(TemporalType.DATE)
    private Date datenaissance;
    @Column(name = "adressederesidence")
    private String adressederesidence;
    @Column(name = "groupesangin")
    private String groupesangin;
    @Column(name = "facteurrhesus")
    private String facteurrhesus;
    @Column(name = "numerocq")
    private Integer numerocq;
    @Column(name = "imgscanrib")
    private String imgscanrib;
    @Column(name = "imgprofil")
    private String imgprofil;
    @OneToMany(mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvHistoriquetravalleur> cvHistoriquetravalleurList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvAptitudeprofessionnelle> cvAptitudeprofessionnelleList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvVistemedical> cvVistemedicalList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvBonnesconduites> cvBonnesconduitesList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvDocofficiels> cvDocofficielsList;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "cvTravailleur", fetch = FetchType.LAZY)
    private CvPermisconduire cvPermisconduire;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleur", fetch = FetchType.LAZY)
    private List<CvNationalitetravailleur> cvNationalitetravailleurList;
    @JoinColumn(name = "cv_posteoccupe_idposteoccupe", referencedColumnName = "idposteoccupe")
    @ManyToOne(fetch = FetchType.EAGER)
    private CvPosteoccupe cvPosteoccupeIdposteoccupe;
    @JoinColumn(name = "cv_affectation_idaffectation", referencedColumnName = "idaffectation")
    @ManyToOne(fetch = FetchType.EAGER)
    private CvAffectation cvAffectationIdaffectation;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvTelephonetavaleur> cvTelephonetavaleurList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvAvertissement> cvAvertissementList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvHistoriqueaffectation> cvHistoriqueaffectationList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleurId", fetch = FetchType.LAZY)
    private List<CvFormation> cvFormationList;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "cvTravailleur", fetch = FetchType.LAZY)
    private CvTravail cvTravail;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvTravailleur", fetch = FetchType.LAZY)
    private List<CvListediplometravailleur> cvListediplometravailleurList;

    public CvTravailleur() {
    }

    public CvTravailleur(Integer id) {
        this.id = id;
    }

    public CvTravailleur(Integer id, int iDpersonne, String nom, String prenom) {
        this.id = id;
        this.iDpersonne = iDpersonne;
        this.nom = nom;
        this.prenom = prenom;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public int getIDpersonne() {
        return iDpersonne;
    }

    public void setIDpersonne(int iDpersonne) {
        this.iDpersonne = iDpersonne;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public Date getDatenaissance() {
        return datenaissance;
    }
    public String getDatenaissanceFormatee() {
        SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");
        return formater.format(datenaissance);
    }

    public void setDatenaissance(Date datenaissance) {
        this.datenaissance = datenaissance;
    }

    public String getAdressederesidence() {
        return adressederesidence;
    }

    public void setAdressederesidence(String adressederesidence) {
        this.adressederesidence = adressederesidence;
    }

    public String getGroupesangin() {
        return groupesangin;
    }

    public void setGroupesangin(String groupesangin) {
        this.groupesangin = groupesangin;
    }

    public String getFacteurrhesus() {
        return facteurrhesus;
    }

    public void setFacteurrhesus(String facteurrhesus) {
        this.facteurrhesus = facteurrhesus;
    }

    public Integer getNumerocq() {
        return numerocq;
    }

    public void setNumerocq(Integer numerocq) {
        this.numerocq = numerocq;
    }

    public String getImgscanrib() {
        return imgscanrib;
    }

    public void setImgscanrib(String imgscanrib) {
        this.imgscanrib = imgscanrib;
    }

    public String getImgprofil() {
        return imgprofil;
    }

    public void setImgprofil(String imgprofil) {
        this.imgprofil = imgprofil;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvHistoriquetravalleur> getCvHistoriquetravalleurList() {
        return cvHistoriquetravalleurList;
    }

    public void setCvHistoriquetravalleurList(List<CvHistoriquetravalleur> cvHistoriquetravalleurList) {
        this.cvHistoriquetravalleurList = cvHistoriquetravalleurList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvAptitudeprofessionnelle> getCvAptitudeprofessionnelleList() {
        return cvAptitudeprofessionnelleList;
    }

    public void setCvAptitudeprofessionnelleList(List<CvAptitudeprofessionnelle> cvAptitudeprofessionnelleList) {
        this.cvAptitudeprofessionnelleList = cvAptitudeprofessionnelleList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvVistemedical> getCvVistemedicalList() {
        return cvVistemedicalList;
    }

    public void setCvVistemedicalList(List<CvVistemedical> cvVistemedicalList) {
        this.cvVistemedicalList = cvVistemedicalList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvBonnesconduites> getCvBonnesconduitesList() {
        return cvBonnesconduitesList;
    }

    public void setCvBonnesconduitesList(List<CvBonnesconduites> cvBonnesconduitesList) {
        this.cvBonnesconduitesList = cvBonnesconduitesList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvDocofficiels> getCvDocofficielsList() {
        return cvDocofficielsList;
    }

    public void setCvDocofficielsList(List<CvDocofficiels> cvDocofficielsList) {
        this.cvDocofficielsList = cvDocofficielsList;
    }

    public CvPermisconduire getCvPermisconduire() {
        return cvPermisconduire;
    }

    public void setCvPermisconduire(CvPermisconduire cvPermisconduire) {
        this.cvPermisconduire = cvPermisconduire;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvNationalitetravailleur> getCvNationalitetravailleurList() {
        return cvNationalitetravailleurList;
    }

    public void setCvNationalitetravailleurList(List<CvNationalitetravailleur> cvNationalitetravailleurList) {
        this.cvNationalitetravailleurList = cvNationalitetravailleurList;
    }

    public CvPosteoccupe getCvPosteoccupeIdposteoccupe() {
        return cvPosteoccupeIdposteoccupe;
    }

    public void setCvPosteoccupeIdposteoccupe(CvPosteoccupe cvPosteoccupeIdposteoccupe) {
        this.cvPosteoccupeIdposteoccupe = cvPosteoccupeIdposteoccupe;
    }

    public CvAffectation getCvAffectationIdaffectation() {
        return cvAffectationIdaffectation;
    }

    public void setCvAffectationIdaffectation(CvAffectation cvAffectationIdaffectation) {
        this.cvAffectationIdaffectation = cvAffectationIdaffectation;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvTelephonetavaleur> getCvTelephonetavaleurList() {
        return cvTelephonetavaleurList;
    }

    public void setCvTelephonetavaleurList(List<CvTelephonetavaleur> cvTelephonetavaleurList) {
        this.cvTelephonetavaleurList = cvTelephonetavaleurList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvAvertissement> getCvAvertissementList() {
        return cvAvertissementList;
    }

    public void setCvAvertissementList(List<CvAvertissement> cvAvertissementList) {
        this.cvAvertissementList = cvAvertissementList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvHistoriqueaffectation> getCvHistoriqueaffectationList() {
        return cvHistoriqueaffectationList;
    }

    public void setCvHistoriqueaffectationList(List<CvHistoriqueaffectation> cvHistoriqueaffectationList) {
        this.cvHistoriqueaffectationList = cvHistoriqueaffectationList;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvFormation> getCvFormationList() {
        return cvFormationList;
    }

    public void setCvFormationList(List<CvFormation> cvFormationList) {
        this.cvFormationList = cvFormationList;
    }

    public CvTravail getCvTravail() {
        return cvTravail;
    }

    public void setCvTravail(CvTravail cvTravail) {
        this.cvTravail = cvTravail;
    }

    @XmlTransient
    @JsonIgnore
    public List<CvListediplometravailleur> getCvListediplometravailleurList() {
        return cvListediplometravailleurList;
    }

    public void setCvListediplometravailleurList(List<CvListediplometravailleur> cvListediplometravailleurList) {
        this.cvListediplometravailleurList = cvListediplometravailleurList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof CvTravailleur)) {
            return false;
        }
        CvTravailleur other = (CvTravailleur) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "fr.cggveritas.crewintranet.jms.entities.CvTravailleur[ id=" + id + " ]";
    }

    @XmlTransient
    @JsonIgnore
    public List<CvAffectationbesoin> getCvAffectationbesoinList() {
        return cvAffectationbesoinList;
    }

    public void setCvAffectationbesoinList(List<CvAffectationbesoin> cvAffectationbesoinList) {
        this.cvAffectationbesoinList = cvAffectationbesoinList;
    }

    public byte[] getImageBlog() {
        return imageBlog;
    }
    
    public void setImageBlog(byte[] imageBlog) {
        this.imageBlog = imageBlog;
    }
    
    public StreamedContent getAfficherImageEnBlob() {
        StreamedContent imagetmp = new DefaultStreamedContent();
        if (imageBlog != null) {
            imagetmp = new DefaultStreamedContent(new ByteArrayInputStream(imageBlog));
        }
        return imagetmp;
    }
    
    public String getNameImageBlog() {
        return nameImageBlog;
    }

    public void setNameImageBlog(String nameImageBlog) {
        this.nameImageBlog = nameImageBlog;
    }

   
    
}
